/**
 * 
 */
package com.proyecto.aiepi.modelo.servicios;


import java.util.ArrayList;
import java.util.List;

import org.hibernate.exception.ConstraintViolationException;

import com.proyecto.aiepi.modelo.dto.CamposAiepiRespuestas;
import com.proyecto.aiepi.modelo.dto.CorrelativosAiepisId;
import com.proyecto.core.modelo.echo.constantes.TipoBusqueda;
import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.ServicioGenerico;
import com.proyecto.histoclin.modelo.dto.HistoclinAiepiResultado;

/**
 * @author vico
 *
 */
public class ServicioTablaApoyoCamposAiepiRespuestas extends ServicioGenerico {

	/**
	 * 
	 */
	ServicioCorrelativosAiepis servicioCorrelativosAiepis;
	
	public ServicioTablaApoyoCamposAiepiRespuestas() {
		// TODO Auto-generated constructor stub
	}


	@Override
	public void incluir(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub
		//super.incluir(pojo, iniciaTransaccion);
		
		CamposAiepiRespuestas objCamposAiepiRespuestas = (CamposAiepiRespuestas)pojo;

		if (isValidacionActiva()){
			validacion.incluir(objCamposAiepiRespuestas);
		}
		
		
		try {
			
			String proxNumero = servicioCorrelativosAiepis.obtenerProximoNumeroComoString(
					new CorrelativosAiepisId (objCamposAiepiRespuestas.getId().getCiaopr(), "CAMPOAIEPIRESUL","campoaiepirespucod" ) ,true);

			objCamposAiepiRespuestas.getId().setCampoaiepirespucod( Integer.parseInt(proxNumero) );
		
			super.incluir(objCamposAiepiRespuestas, iniciaTransaccion);
			
			
		} catch (org.springframework.dao.DataIntegrityViolationException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.PropertyValueException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.datoRequeridoVacio");
			} else if (e.getMostSpecificCause() instanceof ConstraintViolationException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.registroDuplicado");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");

		} catch (org.springframework.dao.DataAccessResourceFailureException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.exception.JDBCConnectionException) {
				throw new GeneralException(
						"error." + claveProperties + ".conexion");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");
		} catch (Exception e) {
			System.err.println(":::ServicioHistoriasClinicas::: " + e.getMessage());
			if("advertencia.HistoriasClinicas.datosBasicos.HistoriasClinicas.modificar.BloqueoOptimista".equals(e.getMessage())){
				throw new GeneralException(	e.getMessage());
			}else{
				throw new GeneralException(
						"error." + claveProperties + ".desconocido");
			}
		}
		
	}

	
	public List<HistoclinAiepiResultado> construirSqlAiepi(String Ciaopr, Integer hisclicod, Integer nropersona){
		/**
		 * 0:aiepievaluanombre
		   1:prioridad
		   2:riesgonombre
		   3:aiepinombre
		   4:tablanombre
		   5:tablanombredto
		   6:simcondi
		   7:camponombre
		   8:camponombredto
		   9:simfiltro
		   10:valor
		   11:ARMADO
		   12:campodescripcion
		   13:operacioncod
		   14:aiepicod
		   15:riesgocod
		   16:condicioncod
		   17:tablacod
		   18:aiepievaluacod
		   19:campoaiepirespucod
		   20:campoaiepicod
		   21:campocod
		   22:condicionfiltrocod 
		 */
		String aiepievaluanombre = null;
		Integer prioridad = -1;
		String riesgonombre = null;
		String aiepinombre = null;
		String tablanombre = null;
		String tablanombredto = null;
		String simcondi = null;
		String camponombre = null;
		String simfiltro = null;
		Double valor = 0.0;
		String ARMADO = null;
		String campodescripcion = null;
		String operacioncod = null;
		Integer aiepicod = -1;
		Integer riesgocod = -1;
		Integer condicioncod = -1;
		Integer tablacod = -1;
		String aiepievaluacod = null;
		Integer campoaiepirespucod = -1;
		Integer campoaiepicod = -1;
		Integer campocod = -1;
		Integer condicionfiltrocod = -1;
		List<String> lstConsultasSql = new ArrayList<String>();
		List<List> lstSqlAiepis = null;
		List<List> lstSqlAiepisResultado = new ArrayList<List>();;
		HistoclinAiepiResultado objHistoclinAiepiResultado = null;
		
		List<HistoclinAiepiResultado > listaTablaHistoclinAiepiResultado = new ArrayList<HistoclinAiepiResultado>();
		
		List<List> lstEstructuraAiepis = this.consultarTodosAiepisEstructura();
		List<List> lstPapa = null;
		List<List> lstHijo = null;
		List<List> lstNieta = null;
		
		String  aiepievaluacodFiltroPapa = "";
		Integer aiepievaluacodCantidadPapa = -1;
		
		String  aiepievaluacodFiltroHijo = "";
		Integer riesgocodFiltroHijo = -1;
		Integer riesgocodCantidadHijo = -1;
		
		String aiepievaluacodFiltroNieta = "";
		Integer riesgocodFiltroNieta = -1;
		Integer tablacodNieta = -1;
		Integer aiepicodNieta = -1;
		Integer tablacodCantidadNieta = -1;
		
		if(lstEstructuraAiepis.size() > 0){
			lstPapa = this.cantidadAiepievaluacod();;
			lstHijo = this.cantidadRiesgocod();
			lstNieta = this.cantidadTablacod();
			/*
			0:aiepievaluacod
			1:riesgocod
			2:aiepicod
			3:aiepinombre
			4:tablacod
			5:tablanombre
			6:tablanombredto
			7:CANTIDAD
			*/
			for(int i=0 ; i < lstPapa.size() ; i++){
				aiepievaluacodFiltroPapa = lstPapa.get(i).get(0).toString();
				aiepievaluacodCantidadPapa = Integer.parseInt(lstPapa.get(i).get(1).toString() );
				for(int j=0 ; j < lstHijo.size() ; j++){
						aiepievaluacodFiltroHijo = lstHijo.get(j).get(0).toString();
						if(aiepievaluacodFiltroHijo.equals(aiepievaluacodFiltroPapa)){
							riesgocodFiltroHijo = Integer.parseInt(lstHijo.get(j).get(1).toString() );
							riesgocodCantidadHijo = Integer.parseInt(lstHijo.get(j).get(2).toString() );
							for(int k=0 ; k < lstNieta.size() ; k++){
								String armaSql = null;
								aiepievaluacodFiltroNieta = lstNieta.get(k).get(0).toString();
								riesgocodFiltroNieta = Integer.parseInt(lstNieta.get(k).get(1).toString() );
								tablacodNieta = Integer.parseInt(lstNieta.get(k).get(4).toString() );
								//tablanombre = lstNieta.get(k).get(3).toString();
								aiepicodNieta = Integer.parseInt(lstNieta.get(k).get(2).toString() );
								tablanombredto = lstNieta.get(k).get(6).toString();
								/*
								 * , " + campoaiepirespucod + " AS campoaiepirespucod, " +
										aiepievaluacodFiltroNieta + " AS aiepievaluacod, " + 
										riesgocodFiltroNieta + " AS riesgocod, " + 
										tablacodNieta + " AS tablacod
								 */
								if(aiepievaluacodFiltroNieta.equals(aiepievaluacodFiltroHijo) && riesgocodFiltroNieta == riesgocodFiltroHijo ){
									
									String armaSqlWhere = "";
									String armaSqlWhere2 = "";
									for(int m=0 ; m < lstEstructuraAiepis.size() ; m++){

										aiepievaluacod = lstEstructuraAiepis.get(m).get(18).toString();
										riesgocod = Integer.parseInt( lstEstructuraAiepis.get(m).get(15).toString() );
										aiepicod = Integer.parseInt( lstEstructuraAiepis.get(m).get(14).toString() );
										tablacod = Integer.parseInt( lstEstructuraAiepis.get(m).get(17).toString() );
										//tablanombre = lstEstructuraAiepis.get(m).get(4).toString();
										ARMADO = lstEstructuraAiepis.get(m).get(11).toString();
										
										if(aiepievaluacod.equals(aiepievaluacodFiltroNieta)
												&& riesgocod == riesgocodFiltroNieta
												&& aiepicod == aiepicodNieta
												&& tablacod == tablacodNieta){
											armaSqlWhere = armaSqlWhere + " " + ARMADO ;	
											campoaiepirespucod = Integer.parseInt( lstEstructuraAiepis.get(m).get(19).toString() );
											prioridad = Integer.parseInt( lstEstructuraAiepis.get(m).get(1).toString() );
											campoaiepicod = Integer.parseInt( lstEstructuraAiepis.get(m).get(20).toString() );
										}
									}
									armaSql = "SELECT new List(" +
									"id.hisclicod, " +
									"'" + prioridad + "' AS prioridad, " +
									"'" + campoaiepirespucod + "' AS campoaiepirespucod," + 
									"'" + aiepievaluacodFiltroNieta + "' AS aiepievaluacod, " + 
									"'" + riesgocodFiltroNieta + "' AS riesgocod, " + 
									"'" + tablacodNieta + "' AS tablacod," +
									"'" + aiepicodNieta + "' AS aiepicod," +
									"'" + campoaiepicod + "' AS campoaiepicod ) " +
									"FROM " + tablanombredto + " WHERE ";
									if(tablacodNieta == 38){
										armaSql = "SELECT new List(" +
										"id.nropersona, " +
										"'" + prioridad + "' AS prioridad, " +
										"'" + campoaiepirespucod + "' AS campoaiepirespucod," + 
										"'" + aiepievaluacodFiltroNieta + "' AS aiepievaluacod, " + 
										"'" + riesgocodFiltroNieta + "' AS riesgocod, " + 
										"'" + tablacodNieta + "' AS tablacod," +
										"'" + aiepicodNieta + "' AS aiepicod," +
										"'" + campoaiepicod + "' AS campoaiepicod ) " +
										"FROM " + tablanombredto + " WHERE ";
										
										armaSqlWhere2 = " AND id.ciaopr = '" + Ciaopr + "' AND id.nropersona = " + nropersona;
									}else{
										armaSql = "SELECT new List(" +
										"id.hisclicod, " +
										"'" + prioridad + "' AS prioridad, " +
										"'" + campoaiepirespucod + "' AS campoaiepirespucod," + 
										"'" + aiepievaluacodFiltroNieta + "' AS aiepievaluacod, " + 
										"'" + riesgocodFiltroNieta + "' AS riesgocod, " + 
										"'" + tablacodNieta + "' AS tablacod," +
										"'" + aiepicodNieta + "' AS aiepicod," +
										"'" + campoaiepicod + "' AS campoaiepicod ) " +
										"FROM " + tablanombredto + " WHERE ";
										armaSqlWhere2 = " AND id.ciaopr = '" + Ciaopr + "' AND id.hisclicod = " + hisclicod + " AND nropersona = " + nropersona;	
									}
									
									lstConsultasSql.add(armaSql + armaSqlWhere + armaSqlWhere2);
								}
							}
						}
				}
			}
			String sql = "";
			int item = 0;
			Integer prioridadant = 0;
			Integer campoaiepicodant = -1;
			String aiepievaluacodant = null;
			Boolean errorUltimo = false;
			for(int i=0 ; i < lstConsultasSql.size() ;i++){
				System.out.println("consulta:: " + lstConsultasSql.get(i).toString());
				sql = lstConsultasSql.get(i).toString();
				try {
					lstSqlAiepis = propiedadDAO.ejecutarQueryConsulta(sql, null);	
					//System.out.println("lstSqlAiepis" +i+".1:"+ lstSqlAiepis.get(0).get(1).toString());
					if(lstSqlAiepis.size()>0){
						//System.out.println("lstSqlAiepis:" +i+",0: "+ lstSqlAiepis.get(0).get(0).toString());
						//System.out.println("lstSqlAiepis" +i+".0:"+ lstSqlAiepis.get(0).toString());
						//return lstSqlAiepis;
						
						prioridad = Integer.parseInt( lstSqlAiepis.get(0).get(1).toString() );
						campoaiepirespucod = Integer.parseInt( lstSqlAiepis.get(0).get(2).toString() );
						aiepievaluacod = lstSqlAiepis.get(0).get(3).toString();
						riesgocod = Integer.parseInt( lstSqlAiepis.get(0).get(4).toString() );
						aiepicod = Integer.parseInt( lstSqlAiepis.get(0).get(5).toString() );
						campoaiepicod = Integer.parseInt( lstSqlAiepis.get(0).get(7).toString() );
						
						//System.out.println("->: " + prioridad);
						//System.out.println("-->: " + campoaiepicod);
						/*if(campoaiepicod != campoaiepicodant){
							prioridadant = -1;
						}
						if(campoaiepirespucod == 2 || campoaiepirespucod == 23 || campoaiepirespucod == 23){
							System.out.println("campoaiepirespucod: " + campoaiepirespucod);
						}*/
						
						if( aiepievaluacod.equals(aiepievaluacodant) && prioridad<prioridadant){
							prioridadant = 10;
						}else{
							prioridadant = 0;
						}
						if(errorUltimo){
							if(prioridad==1){
								prioridadant = 0;
							}else{
								prioridadant = prioridad+2;	
							}
							
						}
						if(prioridad>=prioridadant){
							objHistoclinAiepiResultado = new HistoclinAiepiResultado();
							String[] atributo = {"id.ciaopr","id.campoaiepirespucod"};
							Object[] valorParam = {"1",campoaiepirespucod};
							List lstCampoaiepirespu = buscarCatalogoPorPropiedad(atributo, valorParam, TipoBusqueda.OPE_IGUAL, false);
							
							objHistoclinAiepiResultado.getId().setCiaopr(Ciaopr);
							objHistoclinAiepiResultado.getId().setHisclicod(hisclicod);
							objHistoclinAiepiResultado.setCampoaiepirespucod(campoaiepirespucod);
							objHistoclinAiepiResultado.setCamposAiepiRespuestas( (CamposAiepiRespuestas)lstCampoaiepirespu.get(0) );
							objHistoclinAiepiResultado.setRiesgocod(riesgocod);
							objHistoclinAiepiResultado.setRiesgos( ((CamposAiepiRespuestas)lstCampoaiepirespu.get(0)).getRiesgos() );
							objHistoclinAiepiResultado.setCampoaiepicod(campoaiepicod);
							objHistoclinAiepiResultado.setCamposAiepi(((CamposAiepiRespuestas)lstCampoaiepirespu.get(0)).getCamposAiepi() );
							
							listaTablaHistoclinAiepiResultado.add(objHistoclinAiepiResultado);	
							prioridadant = prioridad;
							campoaiepicodant = campoaiepicod;
							aiepievaluacodant = aiepievaluacod;
							errorUltimo = false;
							/*
							System.out.println("prioridad--->:  " + prioridad);
							System.out.println("campoaiepicod--->: " + campoaiepicod);
							System.out.println("riesgocod---> : " + riesgocod);
							System.out.println("campoaiepirespucod---> : " + campoaiepirespucod);
							System.out.println("aiepievaluacod---> : " + aiepievaluacod);
							System.out.println("aiepicod---> : " + aiepicod);
							*/
						}
						/*
						lstSqlAiepisResultado.get(item).set(0, prioridad);
						lstSqlAiepisResultado.get(item).set(1, campoaiepirespucod);
						lstSqlAiepisResultado.get(item).set(2, riesgocod);
						lstSqlAiepisResultado.get(item).set(3, campoaiepicod);
						
						item++;
						*/
					}else{
						//System.out.println("NO EXISTE DATO EN CONSULTA lstSqlAiepis: " + i );
					}
						
				} catch (Exception e) {
					// TODO: handle exception
					//System.err.println(lstConsultasSql.get(i).toString());
					System.err.println("e.for.lstConsultasSql:: " + e.getMessage());
					//return lstSqlAiepis;
					errorUltimo = true;
					prioridadant = prioridad;
					aiepievaluacodant = aiepievaluacod;
				}
			}
			
			//return lstSqlAiepis;

			if(lstSqlAiepisResultado.size()>0){
				
				for(int i=0 ; i < lstSqlAiepisResultado.size() ;i++){
					prioridad = Integer.parseInt( lstSqlAiepisResultado.get(i).get(0).toString() );
					campoaiepirespucod = Integer.parseInt( lstSqlAiepisResultado.get(i).get(1).toString() );
					riesgocod = Integer.parseInt( lstSqlAiepisResultado.get(i).get(2).toString() );
					campoaiepicod = Integer.parseInt( lstSqlAiepisResultado.get(i).get(3).toString() );
					
					objHistoclinAiepiResultado = new HistoclinAiepiResultado();
					objHistoclinAiepiResultado.getId().setCiaopr(Ciaopr);
					objHistoclinAiepiResultado.getId().setHisclicod(hisclicod);
					objHistoclinAiepiResultado.setRiesgocod(riesgocod);
					objHistoclinAiepiResultado.setCampoaiepicod(campoaiepicod);
					listaTablaHistoclinAiepiResultado.add(objHistoclinAiepiResultado);
				}
				
			}

		}		
		return listaTablaHistoclinAiepiResultado;
	}

	//
	/*
	for(int i=0 ; i < lstEstructuraAiepis.size() ; i++){
		aiepievaluanombre = lstEstructuraAiepis.get(i).get(0).toString();
		prioridad = Integer.parseInt( lstEstructuraAiepis.get(i).get(1).toString() );
		riesgonombre = lstEstructuraAiepis.get(i).get(2).toString();
		aiepinombre = lstEstructuraAiepis.get(i).get(3).toString();
		tablanombre = lstEstructuraAiepis.get(i).get(4).toString();
		tablanombredto = lstEstructuraAiepis.get(i).get(5).toString();
		simcondi = lstEstructuraAiepis.get(i).get(6).toString();
		camponombre = lstEstructuraAiepis.get(i).get(7).toString();
		camponombredto = lstEstructuraAiepis.get(i).get(8).toString();
		simfiltro = lstEstructuraAiepis.get(i).get(9).toString();
		valor = Double.parseDouble( lstEstructuraAiepis.get(i).get(10).toString() );
		ARMADO = lstEstructuraAiepis.get(i).get(11).toString();
		campodescripcion = lstEstructuraAiepis.get(i).get(12).toString();
		operacioncod = lstEstructuraAiepis.get(i).get(13).toString();
		aiepicod = Integer.parseInt( lstEstructuraAiepis.get(i).get(14).toString() );
		//riesgocod = Integer.parseInt( lstEstructuraAiepis.get(i).get(15).toString() );
		condicioncod = Integer.parseInt( lstEstructuraAiepis.get(i).get(16).toString() );
		//tablacod = Integer.parseInt( lstEstructuraAiepis.get(i).get(17).toString() );
		//aiepievaluacod = lstEstructuraAiepis.get(i).get(18).toString();
		campoaiepirespucod = Integer.parseInt( lstEstructuraAiepis.get(i).get(19).toString() );
		campoaiepicod = Integer.parseInt( lstEstructuraAiepis.get(i).get(20).toString() );
		campocod = Integer.parseInt( lstEstructuraAiepis.get(i).get(21).toString() );
		condicionfiltrocod = Integer.parseInt( lstEstructuraAiepis.get(i).get(22).toString() );
		
		
	}
*/
	
	/**
	 * 
	 * 
		0:aiepievaluanombre
		1:prioridad
		2:riesgonombre
		3:aiepinombre
		4:tablanombre
		5:tablanombredto
		6:simcondi
		7:camponombre
		8:camponombredto
		9:simfiltro
		10:valor
		11:ARMADO
		12:campodescripcion
		13:operacioncod
		14:aiepicod
		15:riesgocod
		16:condicioncod
		17:tablacod
		18:aiepievaluacod
		19:campoaiepirespucod
		20:campoaiepicod
		21:campocod
		22:condicionfiltrocod 
	 * @return List<List>
	 */
	public List<List> consultarTodosAiepisEstructura(){
//|| D.tablanombredto || '.' 
		List<List> lstAiepisEstructura = null;
		String sql = "";
		sql = "SELECT new List( " +
					"G.aiepievaluanombre,F.prioridad,F.riesgonombre,E.aiepinombre, " +
					"D.tablanombre,D.tablanombredto,H.simbolo as simcondi,C.camponombre,C.camponombredto,I.simbolo AS simfiltro," +
					"A.valor, " +
						"CASE WHEN A.condicionfiltrocod is null THEN ' ' " +
						"ELSE CASE WHEN A.condicioncierrecod = 1 THEN '(' ELSE ' ' END " +
						"END ||" +
						
						"CASE WHEN H.simbolo is null THEN '' " +
						"ELSE H.simbolo " +
						"END || ' ' " +
					
						"|| C.camponombredto || ' ' || I.simbolo || ' ' ||  " +
						
						"CASE WHEN C.esnumerico = 'S' THEN ' ' ELSE '''' END || " +
						
						"A.valor || " +
						
						"CASE WHEN C.esnumerico = 'S' THEN ' ' ELSE '''' END || " +
						
						"CASE WHEN  A.condicionfiltrocod = 10 THEN (' AND ' " +
								 "|| CASE WHEN C.esnumerico = 'S' THEN ' ' ELSE '''' END " +
								 "|| A.valor2 || " +
								 "CASE WHEN C.esnumerico = 'S' THEN ' ' ELSE '''' END ) " +
							 "ELSE '' END ||  " +

						"CASE WHEN A.condicionfiltrocod is null THEN ' ' " +
							"ELSE CASE WHEN A.condicioncierrecod = 2 THEN ')' ELSE ' ' END " +
						"END " +
					"AS ARMADO, " +
					"C.campodescripcion,C.operacioncod," +
					"B.aiepicod, " +
					"A.riesgocod, " +
					"A.condicioncod, " +
					"C.tablacod,F.aiepievaluacod,A.id.campoaiepirespucod,A.campoaiepicod,B.campocod,A.condicionfiltrocod )" +
					"FROM CamposAiepiRespuestas AS A, CampoAiepi AS B, Campos AS C, Tablas AS D, Aiepis AS E, Riesgos AS F, " +
					"AiepiEvaluacion AS G, Condiciones AS H, CondicionesFiltro AS I " +
					"WHERE A.id.ciaopr = '1' AND A.id.ciaopr = B.id.ciaopr AND A.campoaiepicod = B.id.campoaiepicod " +
						"AND B.id.ciaopr = C.id.ciaopr AND B.campocod = C.id.campocod " +
						"AND C.id.ciaopr = D.id.ciaopr AND C.tablacod = D.id.tablacod " +
						"AND B.id.ciaopr = E.id.ciaopr AND B.aiepicod = E.id.aiepicod " +
						"AND A.id.ciaopr = F.id.ciaopr AND A.riesgocod = F.id.riesgocod " +
						"AND F.id.ciaopr = G.id.ciaopr AND F.aiepievaluacod = G.id.aiepievaluacod " +
						"AND A.id.ciaopr = H.id.ciaopr AND A.condicioncod = H.id.condicioncod " +
						"AND A.id.ciaopr = I.id.ciaopr AND A.condicionfiltrocod = I.id.condicionfiltrocod " +
					"ORDER BY G.aiepievaluanombre,F.prioridad DESC, " +
						"F.riesgonombre, E.aiepinombre, D.tablanombre, H.simbolo, A.valor ";				
				/*	
				"FROM campos_aiepi_respuestas AS A " +
				"LEFT JOIN campos_aiepi AS B			ON A.ciaopr = B.ciaopr AND A.campoaiepicod = B.campoaiepicod " +
				"LEFT JOIN campos AS C					ON B.ciaopr = C.ciaopr AND B.campocod = C.campocod " +
				"LEFT JOIN tablas AS D					ON C.ciaopr = D.ciaopr AND C.tablacod = D.tablacod " +
				"LEFT JOIN aiepis AS E					ON B.ciaopr = E.ciaopr AND B.aiepicod = E.aiepicod " +
				"LEFT JOIN riesgos AS F					ON A.ciaopr = F.ciaopr AND A.riesgocod = F.riesgocod " +
				"LEFT JOIN aiepis_evaluaciones AS G		ON F.ciaopr = G.ciaopr AND F.aiepievaluacod = G.aiepievaluacod " +
				"LEFT JOIN condiciones AS H				ON A.ciaopr = H.ciaopr AND A.condicioncod = H.condicioncod " +
				"LEFT JOIN condiciones_filtro AS I		ON A.ciaopr = I.ciaopr AND A.condicionfiltrocod = I.condicionfiltrocod " ;
*/
		try {
			System.out.println("consultarTodosAiepisEstructura.query:: " + sql);
			lstAiepisEstructura = propiedadDAO.ejecutarQueryConsulta(sql, null);
			
			return lstAiepisEstructura;	
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("error en consulta consultarTodosAiepisEstructura " + e.getMessage());
			return null;
		}
		
	}
	
	/**
	 * aiepievaluacod
	 * cantidadAiepievaluacod
	 * @return
	 */
	public List<List>  cantidadAiepievaluacod(){
		List<List> lstAiepisEstructura_Aiepievaluacod = null;
		String sql = "";
		sql = "SELECT new List( " +
						"F.aiepievaluacod, count(F.aiepievaluacod) )" +
					"FROM CamposAiepiRespuestas AS A, CampoAiepi AS B, Campos AS C, Tablas AS D, Aiepis AS E, Riesgos AS F, " +
					"AiepiEvaluacion AS G, Condiciones AS H, CondicionesFiltro AS I " +
					"WHERE A.id.ciaopr = B.id.ciaopr AND A.campoaiepicod = B.id.campoaiepicod " +
						"AND B.id.ciaopr = C.id.ciaopr AND B.campocod = C.id.campocod " +
						"AND C.id.ciaopr = D.id.ciaopr AND C.tablacod = D.id.tablacod " +
						"AND B.id.ciaopr = E.id.ciaopr AND B.aiepicod = E.id.aiepicod " +
						"AND A.id.ciaopr = F.id.ciaopr AND A.riesgocod = F.id.riesgocod " +
						"AND F.id.ciaopr = G.id.ciaopr AND F.aiepievaluacod = G.id.aiepievaluacod " +
						"AND A.id.ciaopr = H.id.ciaopr AND A.condicioncod = H.id.condicioncod " +
						"AND A.id.ciaopr = I.id.ciaopr AND A.condicionfiltrocod = I.id.condicionfiltrocod " +
					"GROUP BY F.aiepievaluacod " +
					"ORDER BY F.aiepievaluacod ";
		try {
			//System.out.println("cantidadAiepievaluacod.query:: " + sql);
			lstAiepisEstructura_Aiepievaluacod = propiedadDAO.ejecutarQueryConsulta(sql, null);
			
			return lstAiepisEstructura_Aiepievaluacod;	
		} catch (Exception e) {
			// TODO: handle exception
			System.err.println("error en consulta cantidadAiepievaluacod " + e.getMessage());
			return null;
		}
		
	}
	
	public List<List>  cantidadRiesgocod(){
		List<List> lstAiepisEstructura_Riesgocod = null;
		String sql = "";
		sql = "SELECT new List( " +
						"F.aiepievaluacod, A.riesgocod, count(A.riesgocod) )" +
					"FROM CamposAiepiRespuestas AS A, CampoAiepi AS B, Campos AS C, Tablas AS D, Aiepis AS E, Riesgos AS F, " +
					"AiepiEvaluacion AS G, Condiciones AS H, CondicionesFiltro AS I " +
					"WHERE A.id.ciaopr = B.id.ciaopr AND A.campoaiepicod = B.id.campoaiepicod " +
						"AND B.id.ciaopr = C.id.ciaopr AND B.campocod = C.id.campocod " +
						"AND C.id.ciaopr = D.id.ciaopr AND C.tablacod = D.id.tablacod " +
						"AND B.id.ciaopr = E.id.ciaopr AND B.aiepicod = E.id.aiepicod " +
						"AND A.id.ciaopr = F.id.ciaopr AND A.riesgocod = F.id.riesgocod " +
						"AND F.id.ciaopr = G.id.ciaopr AND F.aiepievaluacod = G.id.aiepievaluacod " +
						"AND A.id.ciaopr = H.id.ciaopr AND A.condicioncod = H.id.condicioncod " +
						"AND A.id.ciaopr = I.id.ciaopr AND A.condicionfiltrocod = I.id.condicionfiltrocod " +
					"GROUP BY F.aiepievaluacod, A.riesgocod " +
					"ORDER BY F.aiepievaluacod, A.riesgocod ";		
		try {
			//System.out.println("cantidadRiesgocod.query:: " + sql);
			lstAiepisEstructura_Riesgocod = propiedadDAO.ejecutarQueryConsulta(sql, null);
			
			return lstAiepisEstructura_Riesgocod;	
		} catch (Exception e) {
			// TODO: handle exception
			System.err.println("error en consulta cantidadRiesgocod " + e.getMessage());
			return null;
		}
		
	}

	/**
	 * aiepievaluacod
	 * riesgocod
	 * aiepicod
	 * aiepinombre
	 * tablacod
	 * tablanombre
	 * tablanombredto
	 * CANTIDAD
	 * @return
	 */
	public List<List>  cantidadTablacod(){
		List<List> lstAiepisEstructura_Riesgocod = null;
		String sql = "";
		sql = "SELECT new List( " +
						"F.aiepievaluacod, A.riesgocod, B.aiepicod, E.aiepinombre, C.tablacod, D.tablanombre, D.tablanombredto, count(C.tablacod) )" +
					"FROM CamposAiepiRespuestas AS A, CampoAiepi AS B, Campos AS C, Tablas AS D, Aiepis AS E, Riesgos AS F, " +
					"AiepiEvaluacion AS G, Condiciones AS H, CondicionesFiltro AS I " +
					"WHERE A.id.ciaopr = B.id.ciaopr AND A.campoaiepicod = B.id.campoaiepicod " +
						"AND B.id.ciaopr = C.id.ciaopr AND B.campocod = C.id.campocod " +
						"AND C.id.ciaopr = D.id.ciaopr AND C.tablacod = D.id.tablacod " +
						"AND B.id.ciaopr = E.id.ciaopr AND B.aiepicod = E.id.aiepicod " +
						"AND A.id.ciaopr = F.id.ciaopr AND A.riesgocod = F.id.riesgocod " +
						"AND F.id.ciaopr = G.id.ciaopr AND F.aiepievaluacod = G.id.aiepievaluacod " +
						"AND A.id.ciaopr = H.id.ciaopr AND A.condicioncod = H.id.condicioncod " +
						"AND A.id.ciaopr = I.id.ciaopr AND A.condicionfiltrocod = I.id.condicionfiltrocod " +
					"GROUP BY F.aiepievaluacod, A.riesgocod, B.aiepicod, E.aiepinombre, C.tablacod, D.tablanombre, D.tablanombredto " +
					"ORDER BY F.aiepievaluacod, A.riesgocod, B.aiepicod, E.aiepinombre, C.tablacod, D.tablanombre, D.tablanombredto ";		
		try {
			//System.out.println("cantidadTablacod.query:: " + sql);
			lstAiepisEstructura_Riesgocod = propiedadDAO.ejecutarQueryConsulta(sql, null);
			
			return lstAiepisEstructura_Riesgocod;	
		} catch (Exception e) {
			// TODO: handle exception
			System.err.println("error en consulta cantidadTablacod " + e.getMessage());
			return null;
		}
		
	}
	
	public ServicioCorrelativosAiepis getServicioCorrelativosAiepis() {
		return servicioCorrelativosAiepis;
	}

	public void setServicioCorrelativosAiepis(
			ServicioCorrelativosAiepis servicioCorrelativosAiepis) {
		this.servicioCorrelativosAiepis = servicioCorrelativosAiepis;
	}

}
